#ifndef ANALYZER_H
#define ANALYZER_H

#include <head/g_pch_core.h>
#include <support/odbc_helper.h>
#include "g_ver.h"
#include "m_fhs.h"

class Analyzer : public QObject
{
    Q_OBJECT
public:
    explicit Analyzer(QObject *parent = nullptr);
    ~Analyzer();

    void onAwake();
    void onDebug();
    void onAnalyze(const QString &beginDate);
    int getStock(const QString &invCode);

    void analyze_DL(const QString &beginDate);
    bool itemAnalyze_DL(const QString &dlid,bool spec);
    bool cellAnalyze_DL(const QString &invCode, int delivery,bool spec);
    bool action_cellAnalyze_DL(const QString &invCode,
            int stock,int delivery,int reserve,
                               int restriction);
    bool tagUp_DL(const QString &dlid);
    void reset_DL(const QString &beginDate);
    void onTest_DL(const QString &cDLCode);

    void analyze_EB(const QString &beginDate);
    bool itemAnalyze_EB(const QString &autoID);
    bool cellAnalyze_EB(const QString &invCode, int delivery);
    bool action_cellAnalyze_EB(const QString &invCode,
            int stock,int delivery,int restriction);

    bool tagUp_EB(const QString &autoID);
    void reset_EB(const QString &beginDate);
    void onTest_EB(const QString &cTradeCode);

    void log(const QString &message);

signals:
    bool awake(bool flag);
    void analyzing(bool flag);
    void popMessage(const QString &message);

private:
    bool isTest,isDebug;
    QSqlDatabase odbc;
    QHash<QString,int> stockCache;   //现存量缓存

    QFile logFile;
    QTextStream out;
};

#endif // ANALYZER_H
